﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TravelGenerator.BusinessObjects.SavingManagement;
using TravelGenerator.BusinessObjects.ModelObjects;
using TravelGenerator.BusinessObjects.ObjectValidator;

namespace TravelGenerator.IBusinessLayer.TravelManagement
{
    public interface IAutomaticSavingElement
    {
        /// <summary>
        /// Définition des paramètres de sauvegarde.
        /// </summary>
        /// <param name="bl">The bl.</param>
        /// <param name="entity">The entity.</param>
        /// <param name="contact">The contact.</param>
        void SetEntityToSave(IBLTravelManagement bl, IValidateEntity entity, Contact contact);

        /// <summary>
        /// Retourne une valeur permettant de savoir si la sauvegarde est possible.
        /// </summary>
        /// <returns>
        /// 	<c>true</c> if this instance can save; otherwise, <c>false</c>.
        /// </returns>
        bool CanSave();

        /// <summary>
        /// Obtient la raison de l'impossibilité de sauvegarder
        /// </summary>
        /// <returns></returns>
        SaveError GetSaveError();

        /// <summary>
        /// Indique que l'utilisateur s'est connecté.
        /// </summary>
        /// <param name="contact">The contact.</param>
        void UserConnected(Contact contact);

        /// <summary>
        /// Sauvegarde de l'entité.
        /// </summary>
        /// <returns></returns>
        SaveEntityResult SaveEntity();
    }
}
